package ProyectoX;

import java.awt.Color;
import java.awt.Component;
import java.awt.Event;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.event.KeyEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.border.Border;
import javax.swing.filechooser.FileNameExtensionFilter;

import Robot.Robot;
import Robot.RobotCivil;
import Robot.RobotMilitar;


public class Juego extends JFrame {
	
	protected Partida p;
	protected PanelConFondo menu,pausa,ayuda;
	protected PanelConFondo info,infok1,infok2,infoia,infoib;
	protected PanelConFondo kevin1,kevin2;
	protected TextAreaConFondo codigo; 
	protected String militar,civil;
	protected Robot robot;
	protected boolean empezo;
	protected BufferedReader rea;
	
	

	public Juego(){
		
		
		empezar();
		
		setLayout(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(320*2+5,416+27);
        setLocationRelativeTo(null);
        setTitle("Linguo");
        setResizable(false);
        setVisible(true);
	}
	
	/**
	 * Inicializa la GUI
	 */
	
	
	public void empezar(){	
		
		codigo=new TextAreaConFondo();
		ayuda=new PanelConFondo("/ProyectoX/fondoMenu.png",320,384);
		pausa=new PanelConFondo("/ProyectoX/pause.png",320,32*4);
		menu=new PanelConFondo("/ProyectoX/fondoMenu.png",320,32*8);
		info=new PanelConFondo("/ProyectoX/negro.png",320,32);
		infok1=new PanelConFondo("/ProyectoX/morefuel.png",320,160);
		infok2=new PanelConFondo("/ProyectoX/shoots.png",320,160);
		kevin1=new PanelConFondo("/Robot/1u.png",32*3,32*3);
		kevin2=new PanelConFondo("/Robot/2u.png",32*2,32*2);
		infoia=new PanelConFondo("/ProyectoX/loadfile.png",320,32);
		infoib=new PanelConFondo("/ProyectoX/negro.png",320,32);;
		
		ayuda.setBounds(0,32,320,384);
		pausa.setBounds(0,32*5,320,32*4);
		codigo.setBounds(320, 32, 320, 420);
		kevin1.setBounds(32, 32*5, 32*3, 32*3);
		kevin2.setBounds(32*6, 32*5, 32*3, 32*3);
		menu.setBounds(0,32,320*2,384);
		info.setBounds(0,0,320,32);	
		infok1.setBounds(0,32*8, 320,160);
		infok2.setBounds(0,32*8, 320,160);
		infoia.setBounds(320,0,320,32);
		infoib.setBounds(320,0,320,32);
		
		add(pausa);
		add(ayuda);
		add(codigo);
		add(infok1);
		add(infok2);
		add(infoia);
		add(infoib);
		add(kevin1);
		add(kevin2);
		add(info);
		add(menu);
		
		pausa.setVisible(false);
		infok2.setVisible(false);
		infoib.setVisible(false);
		ayuda.setVisible(false);
		
		Oyente oyi=new Oyente(this);
		Oyente2 oyi2=new Oyente2();
		Oyente3 oyi3=new Oyente3();
		Oyente4 oyi4=new Oyente4();
		
		
		codigo.addMouseListener(oyi3);
		codigo.addKeyListener(oyi2);
		
		
		menu.addKeyListener(oyi);
		infoia.addMouseListener(oyi4);
		
		menu.setFocusable(true);
	}
	
	/**
	 * Inicia el menu dependiendo si ganaste o no
	 * @param g verdadero si ganaste falso si perdiste
	 */
	
	public void reiniciar(boolean g){
		
		if(g){
			menu.cambiarFondo("/ProyectoX/gano.png",320,32*8);
			
		}
		else{
			menu.cambiarFondo("/ProyectoX/perdio.png",320,32*8);
		}
		
		kevin1.cambiarFondo("/Robot/1u.png",32*3,32*3);
		kevin2.cambiarFondo("/Robot/2u.png",32*2,32*2);
		empezo=false;
		rea=null;
		
		info.cambiarFondo("/ProyectoX/negro.png",320,32);
		infok1.setVisible(true);
		kevin1.setVisible(true);
   	 	kevin2.setVisible(true);
   	 	
   	 	infoia.setVisible(true);
   	 	infoib.setVisible(false);
   	 	
		info.setVisible(true);
		menu.setVisible(true);
		p.setVisible(false);
	
	}
	/*
	 * main
	 */
	public static void main(String[]args){
		new Juego();
	}
	
	private class Oyente extends KeyAdapter{

		protected Juego juego;
		
        public Oyente(Juego j){
              juego=j;
        }

       //Enter o espacio para empezar o reiniciar la partida
        
		public void keyPressed(KeyEvent e) {
        	 int i=e.getKeyCode();
        	 
          	 if(i==KeyEvent.VK_SPACE||i==KeyEvent.VK_ENTER)
          		 if(rea!=null){
	          		 empezo=true;
	          		 Tablero t=new Tablero(rea);
		        	 p=new Partida(juego,robot,t);
		        	 
		        	 p.setBounds(0,0,320,420);
		        	 juego.add(p);
		        	 
		        	 p.setVisible(true);	
		        	 infoib.setVisible(true);
		        	 menu.setVisible(false);
		        	 info.setVisible(false);
		        	 
		        	 kevin1.setVisible(false);
		        	 kevin2.setVisible(false);
		        	 infok1.setVisible(false);
		        	 infok2.setVisible(false); 	
		        	 infoia.setVisible(false);
				}
          	 if(i==KeyEvent.VK_LEFT){
          		if(civil!=null){
						 robot=new RobotCivil(Integer.parseInt(civil.substring(0, 1)),Integer.parseInt(civil.substring(2, 3)),Integer.parseInt(civil.substring(4, 7)));
          		}
          		kevin1.cambiarFondo("/Robot/1u.png",32*3,32*3);
        		kevin2.cambiarFondo("/Robot/2u.png",32*2,32*2);
        		infok1.setVisible(true);
        		infok2.setVisible(false);
        		
          	 }
          	if(i==KeyEvent.VK_RIGHT){
          		if(militar!=null){
						robot=new RobotMilitar(Integer.parseInt(militar.substring(0, 1)),Integer.parseInt(militar.substring(2, 3)),Integer.parseInt(militar.substring(4, 7)),Integer.parseInt(militar.substring(8,10)));
          		}
          		kevin1.cambiarFondo("/Robot/1u.png",32*2,32*2);
        		kevin2.cambiarFondo("/Robot/2u.png",32*3,32*3);
        		infok1.setVisible(false);
        		infok2.setVisible(true);		
          	 }
          	 
        }
	}
	private class Oyente2 extends KeyAdapter{
		
		public void keyPressed(KeyEvent e) {
       	 	int i=e.getKeyCode();
       	 	switch(i){
       	 	case KeyEvent.VK_ESCAPE:{
       	 			if(empezo){
       	 				pausa.setVisible(false);
       	 				codigo.transferFocus();
       	 				p.getTimer().start();
       	 				
       	 			}
       	 			else{
       	 			pausa.setVisible(false);
       	 			codigo.transferFocus();
       	 			menu.setEnabled(true);
       	 			
       	 			}
       	 			
       	 		}
       	 	}
		}
	}
	private class Oyente3 extends MouseAdapter{
		
		public void mousePressed(MouseEvent e){	
			if(empezo){
				p.getTimer().stop();
				pausa.setVisible(true);
			}
			else
			pausa.setVisible(true);
		}
		
	}
	
	private class Oyente4 extends MouseAdapter{
		
		public void mousePressed(MouseEvent e){
			
			
				JFileChooser chooser = new JFileChooser();
			    chooser.showOpenDialog(Juego.this);
			    if(chooser.getSelectedFile()!=null){
			    	kevin1.cambiarFondo("/Robot/1u.png",32*3,32*3);
	        		kevin2.cambiarFondo("/Robot/2u.png",32*2,32*2);
	        		infok1.setVisible(true);
	        		infok2.setVisible(false);
	        		
				    try {
						FileReader nivel= new FileReader(chooser.getSelectedFile().getPath());
						rea=new BufferedReader(nivel);
					} catch (FileNotFoundException e1) {
					
						e1.printStackTrace();
					}
				    
				    try {
						 civil=rea.readLine();
						 militar=rea.readLine();
						
						 robot=new RobotCivil(Integer.parseInt(civil.substring(0, 1)),Integer.parseInt(civil.substring(2, 3)),Integer.parseInt(civil.substring(4, 7)));
						 
					} catch (IOException e1) {
						
						e1.printStackTrace();
					}
				   
				   info.cambiarFondo("/ProyectoX/choose.png",320,32); 
			    }
		    
		}
	}

	
}